package Aula13;

public class FilaCircularPrioridadeImpl implements FilaCircularPrioridade{
	
	private int[] array;
	private int size;
	private final int capacidade = 100;
	
	public FilaCircularPrioridadeImpl(){
		array = new int[capacidade];
		size = 0;  
	}

	public int inserir(int elemento) {
		if(size == capacidade){
			return 0;
		}
		array[size++] = elemento;
		return 1;
	}

	public int remover() {
		if(size == 0){
			return -1;
		}
		qsort(array, 0, size);
		return array[size--];
	}
	
	private void qsort(int[] array, int begin, int end) {
		if (end > begin) {
			int index = partition(array, begin, end);
			qsort(array, begin, index - 1);
			qsort(array, index + 1, end);
		}
	}
	
	private int partition(int[] array ,int begin, int end )  
    {  
        int pivot = array[begin];  
        int i = begin - 1;  
        int j = end + 1;  
        while (i < j){  
              
            i++;   
            while ( array[i] < pivot )   
                i++;  
              
            j--;   
            while ( array[j] > pivot )   
                j--;  
              
            if ( i < j )   
                swap(array, i, j);  
        }  
        return j;  
    }
	
	private void swap(int[] array, int i, int j) {
		int tmp = array[i];
		array[i] = array[j];
		array[j] = tmp;
	}
	
}
